Gprint               戻る



画像を印刷する目的で、文字列の印刷はできません。
FormにPanel1,2を配置し、Image1、ScrollBar1などが見やすいようカスタム編集で色をつけました。
Image2はVisible Faleとし裏でBitmapを画像の元フアイルの画素数と同じにし印刷の時に使用しました。
ScrollBarは100から-100ドットを画像データの幅に加算し縮小、拡大を行いました。またImage1のBitmapで印刷すると、元画像の の精度を保てないのでImage2のBitmapで印刷しました。
Image1は印刷時のイメ−ジを示しているだけです。
プリンタ−設定はPrinterSetupDialogを利用し、MainMenuは終了、開く→フアイル を設定してあります

画像ソフトなど重たいソフトを使用せず、MyTrim,Gresize、Gprintを組み合わせ、画像の大きさ、クリップボ−ドのデータの保存、印刷など簡単な編集を したいと思っております。
ImageではなくImageViewerを使ったほうが簡単なようでした。
VCLで同じようソフト以前作って使用していたのですが、最近のデジカメの画素数が大きくなりVCLでは画像の読み込みに時間が掛かりすぎ我慢ができず FireMonkeyでソフトを作りなおしました。


gprint ソ−ス
/---Gprint------------------------------------------------------------------------

#include 
#pragma hdrstop
#include "FMX.Printer.hpp"
#include 
#include 
//#include 

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.fmx"
TForm1 *Form1;
//---------------------------------------------------------------------------

Graphics::TBitmap *bmp= new TBitmap(0, 0);
Graphics::TBitmap *bmp1= new TBitmap(0, 0);


__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void Set_Image2()
{
  TRectF SrcRect, DestRect;

	float r=Form1->Image1->Width/Form1->Image1->Height;
	Form1->Image2->Width=bmp->Width;
	Form1->Image2->Height=Form1->Image2->Width/r;

	if(Form1->Image2->Height>5000)    //bitmapの縦は8000ぐらいまでが限度のよう(このPCでは)?
	{
	  Form1->Image2->Height=5000;
	  Form1->Image2->Width=5000*r;
	}

	if(bmp->Width<1000)
	{
		Form1->ScrollBar1->SmallChange=5;
	}
	else
	{
	  Form1->ScrollBar1->SmallChange=10;
	}

   r=(float)bmp->Width/bmp->Height;
   bmp1->Width=Form1->Image2->Width;
   bmp1->Height=bmp1->Width/r;

   SrcRect  = TRectF(0, 0, bmp->Width, bmp->Height);
   DestRect =  TRectF(0, 0, bmp1->Width, bmp1->Height);

   bmp1->Canvas->BeginScene();
   bmp1->Canvas->DrawBitmap(bmp, SrcRect, DestRect, 1,false);
   bmp1->Canvas->EndScene();

   Form1->Image2->Bitmap=bmp1;

}
void scroll_sub()
{
   TRectF SrcRect, DestRect;
   float scrollV_X,scrollV_Y;
   float r;
   float paper_x,paper_y;
   float offset_x=0;
   float offset_y=0;

   r=(float)bmp->Width/bmp->Height;

   scrollV_X=Form1->ScrollBar1->Value;
   scrollV_Y=scrollV_X/r;

   paper_x=bmp1->Width+scrollV_X;
   paper_y=bmp1->Height+scrollV_X;

   offset_x=(Form1->Image2->Width-paper_x)/2;
   offset_y=(Form1->Image2->Height-paper_y)/2;

   SrcRect = TRectF(0, 0, bmp->Width, bmp->Height);
   DestRect = TRectF(offset_x,offset_y, paper_x+offset_x, paper_y+offset_y);

   TBitmap *tmp=new TBitmap(Form1->Image2->Width,Form1->Image2->Height);
   Form1->Image2->Bitmap=tmp;
   delete tmp;

   Form1->Image2->Bitmap->Canvas->BeginScene();
   Form1->Image2->Bitmap->Canvas->DrawBitmap(bmp, SrcRect, DestRect, 1);
   Form1->Image2->Bitmap->Canvas->EndScene();

   Form1->Label2->Text=Form1->ScrollBar1->Value;
}
 void Panel_Set()
 {
  Form1->Panel1->Width=Form1->Image1->Width;
  Form1->Panel1->Height=Form1->Image1->Height;
 }

void prn_setup()  //printer setup
{
  float rscale,Pw,Ph;

  if(Form1->PrinterSetupDialog1->Execute())
  {

   Pw=Printer::Printer()->PageWidth;
   Ph=Printer::Printer()->PageHeight;
   rscale = (float) Pw/Ph;

   int wide=Form1->Image1->Width;

   Form1->Image1->Height=wide/rscale;
   Form1->Image1->Position->Y=0;
   Form1->Image1->Position->X=0;

   Set_Image2();
   Panel_Set();

   Form1->ScrollBar1->Enabled=true;
   Form1->ScrollBar1->Value=0.0;
   Form1->ScrollBar1->Enabled=true;
   Form1->Button1->Enabled=true;

 }
}

void prn()                 //印刷
{
   TRectF SrcRect, DestRect;
   float rw,rh,r;
   float px,py;
   float paper_w,paper_h;
   float offset_x=0;
   float offset_y=0;
   float Pw,Ph;

   Pw=Printer::Printer()->PageWidth;
   Ph=Printer::Printer()->PageHeight;
   r= (float)Form1->Image2->Bitmap->Width/Form1->Image2->Bitmap->Height;

   rw=Pw/(float)Form1->Image2->Bitmap->Width;

   paper_w=Form1->Image2->Bitmap->Width*rw;
   paper_h=paper_w/r;
   offset_x=(Pw-paper_w)/2.0;
   offset_y=(Ph-paper_h)/2.0;

   SrcRect = TRectF(0, 0, Form1->Image2->Bitmap->Width, Form1->Image2->Bitmap->Height);
   DestRect = TRectF(offset_x,offset_y, paper_w+offset_x, paper_h+offset_y);

   Printer::Printer()->BeginDoc();
   Printer::Printer()->Canvas->DrawBitmap(Form1->Image2->Bitmap, SrcRect, DestRect, 1);
   Printer::Printer()->EndDoc();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::MenuItem1Click(TObject *Sender) //Close
{
  delete bmp;
  Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::MenuItem2Click(TObject *Sender)  //Open File
{
   if (OpenDialog1->Execute()) {

	bmp->LoadFromFile(OpenDialog1->FileName);

	Button1->Enabled=true;
	Button2->Enabled=true;
	ScrollBar1->Enabled=true;
	ScrollBar1->Value=0;

	Label3->Text=OpenDialog1->FileName;

	Set_Image2();
	Image1->Bitmap=Image2->Bitmap;

	String  a1=bmp->Width;
	String  a2=bmp->Height;
	Label4->Text=a1+" X "+a2+ " dot";
   }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
 Image1->Width=300;
 Image1->Height=Image1->Width/0.701; //A4の比率に修正
 Image1->Position->X=0;
 Image1->Position->Y=0;
 ScrollBar1->Value=0;
 Panel_Set();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::ScrollBar1Change(TObject *Sender)  //拡大、縮小
{
   scroll_sub(); //Image2 Set
   Image1->Bitmap=Image2->Bitmap;

  Label2->Text=ScrollBar1->Value;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)  //printer setup
{
  prn_setup();
  ScrollBar1->Enabled=true;
  Form1->TForm1::ScrollBar1Change(Sender);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender) //印刷
{
   prn();
}
//---------------------------------------------------------------------------